// 版权归Epic Games, Inc.所有。保留所有权利。

#include "LyraInputConfig.h"

#include "LyraLogChannels.h"

#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraInputConfig)

/**
 * 构造函数。
 * @param ObjectInitializer 对象初始化器
 */
ULyraInputConfig::ULyraInputConfig(const FObjectInitializer& ObjectInitializer)
{
}

/**
 * 根据输入标签查找原生输入动作。
 * @param InputTag 要查找的输入标签
 * @param bLogNotFound 是否在未找到时记录错误
 * @return 找到的输入动作，未找到返回nullptr
 */
const UInputAction* ULyraInputConfig::FindNativeInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const
{
	// 遍历原生输入动作数组
	for (const FLyraInputAction& Action : NativeInputActions)
	{
		// 检查输入动作和标签是否匹配
		if (Action.InputAction && (Action.InputTag == InputTag))
		{
			return Action.InputAction; // 返回找到的输入动作
		}
	}

	// 如果未找到且需要记录错误
	if (bLogNotFound)
	{
		UE_LOG(LogLyra, Error, TEXT("在输入配置[%s]上找不到输入标签[%s]的原生输入动作。"), *InputTag.ToString(), *GetNameSafe(this));
	}

	return nullptr; // 返回空指针
}

/**
 * 根据输入标签查找技能输入动作。
 * @param InputTag 要查找的输入标签
 * @param bLogNotFound 是否在未找到时记录错误
 * @return 找到的输入动作，未找到返回nullptr
 */
const UInputAction* ULyraInputConfig::FindAbilityInputActionForTag(const FGameplayTag& InputTag, bool bLogNotFound) const
{
	// 遍历技能输入动作数组
	for (const FLyraInputAction& Action : AbilityInputActions)
	{
		// 检查输入动作和标签是否匹配
		if (Action.InputAction && (Action.InputTag == InputTag))
		{
			return Action.InputAction; // 返回找到的输入动作
		}
	}

	// 如果未找到且需要记录错误
	if (bLogNotFound)
	{
		UE_LOG(LogLyra, Error, TEXT("在输入配置[%s]上找不到输入标签[%s]的技能输入动作。"), *InputTag.ToString(), *GetNameSafe(this));
	}

	return nullptr; // 返回空指针
}